20. 有效的括号

20. 有效的括号

Similar Question

leading to the advanced question

Solution Tips

方案一: 栈

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

var isValid = function (s) {
  function Stack() {
    var items = []
    this.push = function (item){
      console.log(item)
      items.push(item)
    }
    this.pop = function (){
      return items.pop()
    }
    this.isEmpty = function(){
      return items.length === 0 
    }
  }

  let stack = new Stack()
  // 观察结构可以发现,即是括号的类型不同,只有匹配的情况下才可以成功pop
  let map = {
    '[':']',
    '(':')',
    '{':'}',
  }
  for (let i = 0; i < s.length; i++) {
    // 左边的执行push操作,判断是否相等
    if(/\(|\[|\{/.test(s[i])){
      stack.push(s[i])
    }else{
    // 右边的执行pop操作
      let pop = stack.pop()
      console.log(map[pop],s[i])
      if(map[pop] !== s[i]){
        return false
      }
    }
  }

  // 循环执行完毕,栈为空,return true
	return stack.isEmpty()
}